package trastienda.service;

import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import trastienda.dao.CategoriaDAO;
import trastienda.excepcion.DAOExcepcion;
import trastienda.modelo.Categoria;

@Service
public class CategoriaServiceImpl implements CategoriaService {

	@Autowired
	private CategoriaDAO categoriaDAO;

	public void setCategoriaDAO(CategoriaDAO categoriaDAO) {
		this.categoriaDAO = categoriaDAO;
	}

	public Collection<Categoria> listarTodos() throws DAOExcepcion {
		return categoriaDAO.listarTodos();
	}

	public Collection<Categoria> buscarPorNombre(String nombre) throws DAOExcepcion {
		return categoriaDAO.buscarPorNombre(nombre);
	}

	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { DAOExcepcion.class })
	public void insertar(String nombre, String descripcion) throws DAOExcepcion {
		
		Categoria vo = new Categoria();
		vo.setNombre(nombre);
		vo.setDescripcion(descripcion);
				
		categoriaDAO.insertar(vo);
	}

	public Categoria obtenerPorId(int idCategoria) throws DAOExcepcion {
		return categoriaDAO.obtenerPorId(idCategoria);
	}
	
	public Categoria obtenerPorNombre(String nombre) throws DAOExcepcion {
		return categoriaDAO.obtenerPorNombre(nombre);
	}
	
	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { DAOExcepcion.class })
	public void eliminarPorId(int idCategoria) throws DAOExcepcion {
		categoriaDAO.eliminarPorId(idCategoria);
	}
	
	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { DAOExcepcion.class })
	public void eliminarPorNombre(String nombre) throws DAOExcepcion {
		categoriaDAO.eliminarPorNombre(nombre);
	}

	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { DAOExcepcion.class })
	public void actualizar(int idCategoria, String nombre, String descripcion) throws DAOExcepcion {
		
		Categoria vo = new Categoria();
		vo.setIdCategoria(idCategoria);
		vo.setNombre(nombre);
		vo.setDescripcion(descripcion);
		
		categoriaDAO.actualizar(vo);
	}

}
